package com.zmh.service.http;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zmh.common.DateUtil;
import com.zmh.common.RandomUtil;
import com.zmh.dao.WorklogMapper;
import com.zmh.entity.MailEntity;
import com.zmh.entity.WorklogEntity;
import com.zmh.service.http.utils.HttpAPIService;
import com.zmh.service.http.utils.HttpResult;
import com.zmh.service.msg.MailService;

/** 
 * 系统改版，此功能停用
 * 工作日志管理，提醒日志填写，自动批阅日志
 * @author: zhoumh
 * @version: 创建时间：2018年8月15日 下午5:13:23 
 * @Description: 
*/ 
@Service
public class IamtopNotesHttp {
	private static Logger logger = LoggerFactory.getLogger(IamtopNotesHttp.class);
	@Autowired
	private HttpAPIService httpAPIService;
	@Autowired
	private MailService mailService;
	@Autowired
	private WorklogMapper worklogMapper;

	/**
	 * 登陆IamtopNotes
	 * @author zhoumh
	 * @version 创建时间：2018年8月15日 下午5:13:23 
	 * @throws Exception 
	 * @throws IOException 
	 * @throws ClientProtocolException 
	 */
	public boolean login() throws Exception{
		// 设置POST参数
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("username", "zhouminghao");
		map.put("password", "123456");
		map.put("rememberMe", "on");
		// 发起登陆请求
		HttpResult result = httpAPIService.doPost("http://notes.iamtop.com:64023/work/a/login", map);
		if (result.getCode()==302) {
//			logger.info("IamtopNotes登录成功！");
			return true;
		}
		return false;
	}
	/**
	 * 获取全部工作
	 * @return: void
	 * @author: zhoumh
	 * @version: 创建时间：2018年8月15日 下午5:13:23 
	 * @throws Exception 
	 * @Description:
	 */
	public void getAllNotes() throws Exception {
		//登陆
		if (!login()) {
			//如果登陆失败终止后续程序执行
			logger.error("登陆notes失败，本次运行终止。");
			return;
		}
		String url = "http://notes.iamtop.com:64023/work/a/bus/workReview/findReviews?pageNo=1&pageSize=5&type=allReviewed&busUser.id=58&_="+System.currentTimeMillis();
		JSONObject page = JSON.parseObject(httpAPIService.doGet(url)).getJSONObject("page");
		int i = 0;
		if (page.getInteger("total")>0) {
			//如果还有未处理的待审批工作事项
			while (i++<page.getIntValue("pageCount")) {
				System.out.println("http://notes.iamtop.com:64023/work/a/bus/workReview/findReviews?pageNo="+i+"&pageSize=5&type=allReviewed&busUser.id=58&_="+System.currentTimeMillis());
				JSONObject weiyue = JSON.parseObject(httpAPIService.doGet("http://notes.iamtop.com:64023/work/a/bus/workReview/findReviews?pageNo="+i+"&pageSize=5&type=allReviewed&busUser.id=58&_="+System.currentTimeMillis()));
				JSONArray notes = weiyue.getJSONArray("list");
				for (int j = 0; j < notes.size(); j++) {
					JSONObject note = notes.getJSONObject(j);
					JSONArray workLogList = note.getJSONArray("workLogList");
					for (int k = 0; k < workLogList.size(); k++) {
						WorklogEntity worklogEntity = new WorklogEntity();
						worklogEntity.setInDate(note.getString("inDate"));
						JSONObject workLog = workLogList.getJSONObject(k);
						worklogEntity.setFirstName(workLog.getJSONObject("firstClass").getString("name"));
						worklogEntity.setSecondName(workLog.getJSONObject("secondClass").getString("name"));
						worklogEntity.setBusName(workLog.getJSONObject("busClass").getString("name"));
						worklogEntity.setComment(workLog.getString("comment"));
						worklogEntity.setCreateTime(workLog.getString("createDate"));
						worklogEntity.setUpdateTime(workLog.getString("updateDate"));
						worklogEntity.setCostTime(workLog.getString("costTime"));
						worklogMapper.insert(worklogEntity);
					}
				}
			}
		}
		
	}
	/**
	 * 获取未阅工作
	 * @return: void
	 * @author: zhoumh
	 * @version: 创建时间：2018年8月15日 下午5:13:23 
	 * @throws Exception 
	 * @Description:
	 */
	public void getWeiYueNotes() throws Exception {
		//登陆
		if (!login()) {
			//如果登陆失败终止后续程序执行
			logger.error("登陆notes失败，本次运行终止。");
			return;
		}
		String url = "http://notes.iamtop.com:64023/work/a/bus/workReview/findReviews?pageNo=1&pageSize=5&type=weiyue&_="+System.currentTimeMillis();
		JSONObject page = JSON.parseObject(httpAPIService.doGet(url)).getJSONObject("page");
		int i = 0;
		String content = "今日工作日志如下： \n";
		if (page.getInteger("total")>0) {
			//如果还有未处理的待审批工作事项
			while (i++<page.getIntValue("pageCount")) {
				JSONObject weiyue = JSON.parseObject(httpAPIService.doGet("http://notes.iamtop.com:64023/work/a/bus/workReview/findReviews?pageNo="+i+"&pageSize=5&type=weiyue&_="+System.currentTimeMillis()));
				JSONArray notes = weiyue.getJSONArray("list");
				for (int j = 0; j < notes.size(); j++) {
					JSONObject note = notes.getJSONObject(j);
					content = content.concat("\n"+note.getJSONObject("busUser").getString("name")+" ");
					content = content.concat(note.getString("inDate")+" \n");
					JSONArray workLogList = note.getJSONArray("workLogList");
					for (int k = 0; k < workLogList.size(); k++) {
						JSONObject workLog = workLogList.getJSONObject(k);
						content = content.concat(workLog.getJSONObject("firstClass").getString("name")+": ");
						content = content.concat(workLog.getString("comment")+" ");
						content = content.concat(workLog.getString("costTime")+"小时 \n");
					}
				}
			}
		}else {
			content = DateUtil.getDate()+" 未发现待审批工作事项！";
		}
        mailService.saveMail(new MailEntity("工作日志<zhoumh1985@qq.com>", "zmh1812@qq.com", DateUtil.getDate()+"工作日志汇总", content,"sendSimpleMail"));
	}
	/**
	 * 获取未阅工作并设置为已阅
	 * @return: void
	 * @author: zhoumh
	 * @version: 创建时间：2018年8月15日 下午5:13:23 
	 * @throws Exception 
	 * @Description:
	 */
	public void workLogShenyue() throws Exception {
		//登陆
		if (!login()) {
			//如果登陆失败终止后续程序执行
			logger.error("登陆notes失败，本次运行终止。");
			return;
		}
		String url = "http://notes.iamtop.com:64023/work/a/bus/workReview/findReviews?pageNo=1&pageSize=5&type=weiyue&_="+System.currentTimeMillis();
		JSONObject page = JSON.parseObject(httpAPIService.doGet(url)).getJSONObject("page");
		//如果还有未处理的待审批工作事项
		while (page.getIntValue("pageCount")>1) {
			JSONObject weiyue = JSON.parseObject(httpAPIService.doGet(url));
			page = weiyue.getJSONObject("page");
			JSONArray notes = weiyue.getJSONArray("list");
			for (int i = 0; i < notes.size(); i++) {
				Thread.sleep(1000*(RandomUtil.getRandomBy10()+5));
				saveReview(notes.getJSONObject(i));
			}
		}
		logger.info("本次未阅处理已完成！");
	}
	
	/**
	 * 根据工作ID进行通过审核操作
	 * @param workLogId 待审核工作ID
	 * @return: boolean 操作是否成功
	 * @author: zhoumh
	 * @version: 创建时间：2018年8月15日 下午5:13:23 
	 * @throws Exception 
	 * @Description:
	 */
	public boolean saveReview(JSONObject note) throws Exception{
		String url = "http://notes.iamtop.com:64023/work/a/bus/workReview/saveReview";
		// 设置POST参数 score=0&comment=&workLogId=11795&remarks=1
		Map<String, Object> map = new HashMap<String, Object>();
		JSONArray workLogList = note.getJSONArray("workLogList");
		if (workLogList.size()==1) {
			JSONObject workLog = workLogList.getJSONObject(0);
			if ("请假".equals(workLog.getJSONObject("secondClass").getString("name"))) {
				// 如果日志类型为请假，就设置已阅
				map.put("score", "0");
			}
		}else{
			// 设置五星
			map.put("score", "5");
		}
		map.put("comment", "");
		map.put("workLogId", note.getString("id"));
		map.put("remarks", "1");
		map.put("auto", "false");
		HttpResult result = httpAPIService.doPost(url, map);
		if (result.getCode()==200) {
//			logger.info("日志审阅成功！");
			return true;
		}
		logger.error("日志审阅失败！"+note.toString());
		return false;
		
	}

	/**
	 * 获取部门工作人员列表
	 * @return: Root 返回的未审批工作第一页
	 * @author: zhoumh
	 * @version: 创建时间：2018年8月15日 下午5:13:23 
	 * @throws Exception 
	 * @Description: {"isParent":false,"name":"周鸣浩","pId":13,"id":2147483647,"rId":58,"type":"3"}
	 */
	public void getDepartUserList() throws Exception{
		String html = httpAPIService.doGet("http://notes.iamtop.com:64023/work/a/bus/workReview/menu/treeData");
//		System.out.println(html);
		List<Object> list = JSONObject.parseArray(html);
		for (Object obj : list) {
			String pid = JSON.parseObject(obj.toString()).get("pId").toString();
			//只选择产品研发部的人员
			if ("13".equals(pid)) {
				System.out.println(obj.toString());
			}
		}
//		return derpatUsers;
	}
	/*
	 * 登陆
	 * 获取当天日志填报情况
	 * 批阅已提交的日志
	 */
	/**
	 * 获取未提交当日工作日志的人员列表
	 * @return: String 未填写工作日志的人员列表
	 * @author: zhoumh
	 * @version: 创建时间：2018年8月15日 下午5:13:23 
	 * @Description:
	 */
//	public String noSubmitNotes() {
//		String curDay = DateUtil.getDate();
//		String sendMessage = DateUtil.getDateTime()+" 还有如下同事未提交今天的工作日志，请注意填报: ";
//		//登陆
//		if (!login()) {
//			//如果登陆失败终止后续程序执行
//			logger.error("登陆notes失败，本次运行终止。");
//			return "";
//		}
//		// 获取部门人员列表
//		List<User> users = getDepartUserList();
//		for (User user : users) {
//			//获取人员ID
//			int id = user.getRId();
//			//如果是验证zhoumh本人工作日志上报，就跳过
//			if(id == 58 && checkZhoumh(curDay)){
//				continue;
//			}
//			String allWorkUrl = "http://notes.iamtop.com:64023/work/a/bus/workReview/findReviews?pageNo=1&type=allReviewed&busUser.id="+id+"&_="+System.currentTimeMillis();
//			Root allWorkRoot = getWorkList(allWorkUrl);
//			//获取全部工作列表中的第一条工作的时间
//			String allInDate = allWorkRoot.getNotesList().get(0).getInDate();
//			//如果全部工作列表中的第一条工作时间不等于今天
//			if (!curDay.equals(allInDate)) {
//				//查询未审阅工作列表第一条
//				String weiyueUrl = "http://notes.iamtop.com:64023/work/a/bus/workReview/findReviews?pageNo=1&type=weiyue&busUser.id="+id+"&_="+System.currentTimeMillis();
//				Root weiyueRoot = getWorkList(weiyueUrl);
//				//如果该用户的未审阅工作为空
//				if (weiyueRoot.getNotesList().size()==0) {
//					sendMessage=sendMessage+user.getName()+" , ";
//					continue;
//				}
//				//获取未阅工作列表中的第一条工作的时间
//				String wyInDate = weiyueRoot.getNotesList().get(0).getInDate();
//				//如果未审核工作列表中的第一条工作时间也不等于今天
//				if (!curDay.equals(wyInDate)) {
//					sendMessage=sendMessage+user.getName()+" , ";
//				}
//			}
//		}
//		return sendMessage.substring(0, sendMessage.length()-2)+"。";
//	}
	/**
	 * 查询指定日期的工作日志填报情况
	 * @param date 指定的日期 2017-11-15
	 * @return: boolean true 已提报  false  未提报
	 * @author: zhoumh
	 * @version: 创建时间：2018年8月15日 下午5:13:23 
	 * @Description:
	 */
//	public boolean checkZhoumh(String date) {
//		boolean result = false;
//		String url = "http://notes.iamtop.com:64023/work/a/bus/workLog/findStatus?startDate="+date+"&_="+System.currentTimeMillis();
//		// 预期返回值：{"code":true,"data":{"logStatus":"已上报","canLog":true}}
//		String html = getHTML(url);
//		JSONObject js = JSON.parseObject(html);
//		String state = js.getJSONObject("data").getString("logStatus");
//		// 如果这一天的日志状态是已上报就返回true
//		if ("已上报".equals(state)) {
//			result = true;
//		}
//		return result;
//	}
}
